package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.AttributeMapper;
import cn.tedu.csmall.product.pojo.dto.AttributeAddNewDTO;
import cn.tedu.csmall.product.pojo.dto.BrandAddNewDTO;
import cn.tedu.csmall.product.pojo.entity.Attribute;
import cn.tedu.csmall.product.pojo.entity.Brand;
import cn.tedu.csmall.product.pojo.vo.AlbumListItemVO;
import cn.tedu.csmall.product.pojo.vo.AttributeListItemVO;
import cn.tedu.csmall.product.pojo.vo.AttributeStandardVO;
import cn.tedu.csmall.product.service.IAttributeService;
import cn.tedu.csmall.product.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
public class AttributeServiceImpl implements IAttributeService {

    @Autowired
    AttributeMapper attributeMapper;

    public AttributeServiceImpl() {
        System.out.println("创建业务实现类对象：AttributeServiceImpl");
    }

    @Override
    public void addNew(AttributeAddNewDTO attributeAddNewDTO) {
        log.debug("开始处理【添加属性】的业务，参数：{}", attributeAddNewDTO);
        // 检查品牌名称是否已经被占用
        String name = attributeAddNewDTO.getName();
        int count = attributeMapper.countByName(name);
        if (count != 0) {
            // 是：名称已存在，不允许创建，抛出异常
            throw new ServiceException(ServiceCode.ERR_CONFLICT,"添加品牌失败，尝试添加的品牌名称已经被占用！");
        }

        // 创建Brand对象
        Attribute attribute = new Attribute();
        // 将参数DTO中的数据复制到Brand对象中
        BeanUtils.copyProperties(attributeAddNewDTO, attribute);
        // 调用Mapper对象的insert()方法，插入品牌数据
        attributeMapper.insert(attribute);
    }

    @Override
    public void deleteById(Long id) {
        log.debug("开始处理【删除属性】的业务，参数：{}", id);
        // 检查尝试删除的属性是否存在
        AttributeStandardVO queryResult = attributeMapper.getStandardById(id);
        if (queryResult == null) {
            // 是：无此id对应的数据，抛出异常
            String message = "删除属性失败，尝试访问的数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }

        // 调用Mapper对象的deleteById()方法执行删除
        log.debug("即将删除属性数据……");
        attributeMapper.deleteById(id);
        log.debug("删除属性，完成！");
    }

    @Override
    public List<AttributeListItemVO> list() {
        log.debug("开始处理【查询属性列表】的业务");
        return attributeMapper.list();
    }
}
